using Godot;
using System;

public partial class DialogueAudio : AudioStreamPlayer
{
    // 随机音调范围，让声音不单调
    [Export] public float MinPitch = 0.9f;
    [Export] public float MaxPitch = 1.1f;

    // 每几个字响一次（1 = 每个字都响，3 = 每3个字响一次）
    [Export] public int Frequency = 1;

    private int _letterCount = 0;

    public override void _Ready()
    {
        // 1. 寻找 DialogueLabel 节点
        // 注意：根据你的 MyBalloon 场景结构，路径可能不同。
        // 在官方 Example Balloon 中，路径通常是父亲节点的兄弟节点里
        // 建议直接用 Export 拖拽赋值，或者用 FindChild 自动找

        // 尝试自动寻找类型为 RichTextLabel 的节点（DialogueLabel 继承自它）
        // 我们假设这个脚本挂在 AudioStreamPlayer 上，它的父节点是 Balloon 的根
        var root = GetParent();
        var dialogueLabel = root.FindChild("DialogueLabel", true, false); // 递归查找名为 DialogueLabel 的节点

        if (dialogueLabel != null)
        {
            // 2. 连接信号
            //这是 Godot 4 C# 连接带参数信号的标准写法
            dialogueLabel.Connect("spoke", Callable.From<string, int, float>(OnSpoke));
            GD.Print("成功连接打字音效信号！");
        }
        else
        {
            GD.PrintErr("DialogueAudio: 未找到 DialogueLabel 节点，无法播放音效。请检查节点名称。");
        }
    }

    // 3. 信号回调函数
    // 参数类型必须和信号定义完全一致 (String, float)
    private void OnSpoke(string letter, int letter_index, float speed)
    {
        // 过滤空格和换行
        if (string.IsNullOrWhiteSpace(letter)) return;

        // 计数逻辑
        _letterCount++;
        if (_letterCount % Frequency != 0) return;

        // 播放逻辑
        PitchScale = (float)GD.RandRange(MinPitch, MaxPitch);
        Play();
    }
}